package com.shm.kujiale;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class SingletonReg {
    //构建采用ConcurrentHashMap,用于充当缓存注册表
    private static final Map<String, Object> singletonObjects = new ConcurrentHashMap<>();
    //静态代码块只加载一次
    static {
        //实例化bean
        SingletonReg singletonReg = new SingletonReg();
        //并注册到注册表，key为类的完全限定名，value为实例化对象。
        singletonObjects.put(singletonReg.getClass().getName(),singletonReg);
    }

    private SingletonReg(){

    }

    public static SingletonReg getInstance(String className){
        if (className == null){
            return null;
        }
        //从注册表中获取，如果没有直接创建
        if (singletonObjects.get(className) == null){
            try {
                //如果为空，通过反射进行实例化
                singletonObjects.put(className,Class.forName(className).newInstance());
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        //从缓存表中回去，如果缓存命中直接返回
        return (SingletonReg)singletonObjects.get(className);
    }
}
